Oracle 在行中通过Oracle SQL查询拆分逗号分隔的列值 |
您所在的位置:网站首页 › sql 拆分逗号 › Oracle 在行中通过Oracle SQL查询拆分逗号分隔的列值 |
Oracle 在行中通过Oracle SQL查询拆分逗号分隔的列值
在本文中,我们将介绍如何使用Oracle SQL查询来拆分包含逗号分隔值的列。 通常,我们在数据库中可能会遇到某一列的值由逗号分隔的情况。这可能是由于数据导入或其他原因导致的。例如,我们可能有一个包含多个标签的文章表,其中标签以逗号分隔的形式存储在一列中。如果我们需要对每个标签进行分析或查询,将这些逗号分隔的值拆分成独立的行就非常有用。 让我们以一个示例表格来说明这个问题。假设我们有一个名为”articles”的表格,其中包含两列:”article_id”和”tags”,”tags”列中的值以逗号分隔。我们希望通过查询拆分这些逗号分隔的标签。 阅读更多:Oracle 教程 示例数据首先,让我们看看示例数据。假设我们有以下数据: article_id | tags -----------|-------------- 1 | MySQL,SQL 2 | Oracle,SQL 3 | Python,Data现在,我们的目标是将每个文章的标签拆分成独立的行。 方法一:使用REGEXP_SUBSTR函数第一种方法是使用Oracle的REGEXP_SUBSTR函数来拆分逗号分隔字符串。 SELECT article_id, REGEXP_SUBSTR(tags, '[^,]+', 1, level) AS tag FROM articles CONNECT BY REGEXP_SUBSTR(tags, '[^,]+', 1, level) IS NOT NULL AND PRIOR article_id = article_id AND PRIOR sys_guid() IS NOT NULL;这个查询使用CONNECT BY子句来递归地拆分逗号分隔的字符串。在每个递归级别上,REGEXP_SUBSTR函数将返回下一个标签。我们使用PRIOR关键字来确保递归连接是基于”article_id”列的。 查询的结果将是一个包含拆分后标签的结果集。 article_id | tag -----------|------ 1 | MySQL 1 | SQL 2 | Oracle 2 | SQL 3 | Python 3 | Data 方法二:使用XMLTABLE函数另一种常用的方法是使用Oracle的XMLTABLE函数来拆分逗号分隔字符串。 SELECT article_id, TRIM(COLUMN_VALUE) AS tag FROM articles, XMLTABLE(('"' || REPLACE(tags, ',', '","') || '"'))在这个查询中,我们使用XMLTABLE函数来将逗号分隔的字符串转换为XML值,并使用COLUMN_VALUE将XML值拆分成独立的行。我们还使用REPLACE函数将逗号替换为双引号和逗号之间的空格,以便正确解析标签。 查询的结果将类似于: article_id | tag -----------|---- 1 | MySQL 1 | SQL 2 | Oracle 2 | SQL 3 | Python 3 | Data 方法三:使用REGEXP_REPLACE函数第三种方法是使用Oracle的REGEXP_REPLACE函数来替换逗号分隔的字符串,并使用CONNECT BY和LEVEL来生成拆分后的行。 SELECT article_id, REGEXP_REPLACE(tags, '(.*?)(,|$)', '\1\n') AS tag FROM articles CONNECT BY level |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |